zoukankan      html  css  js  c++  java
  • ACM解题之回文序列

    题意:

    一个长度为 n 的序列 a1, m2, ..., an-1, an,如果 ai = an-i+1, i = 1, 2, ..., n,则称之为“回文序列”。本题对于给定的一个序列,请判断其是否回文序列。有多个测试用例。每个测试用例占两行,第一行是一个正整数 n,表示待测试序列有 n 项。第二行是待测试序列,序列的项以一个空格分隔,但是,如果序列项是字符,则没有分隔的空格。输入直至没有数据为止。对于每个测试用例,输出一行,如果输入序列是回文序列,则输出 YES,否则输出 NO.

    解题:C++/Accepted/332k/0ms

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    int main() {
    	int n;
    	while (cin >> n) {
    		string strr;
    		getline(cin, strr);
    		string str;
    		getline(cin, str);
    		int num = str.length();
    		vector<string> vec;
    		string s;
    		for (int i = 0;i < num;i++)//将字符串按空格分割
    		{
    			if (str[i]== ' ')//遇到空格,说明上一个字已经完整了,将它放进句子的数组
    			{
    				vec.push_back(s);
    				//while (!s.empty())
    					//s.pop_back();
    				s ="";
    			}
    			else
    				s.push_back(str[i]);
    		}
    		vec.push_back(s);
    		bool isin = true;  //标记
    		if (vec.size() == 1)//说明输入没有空格
    		{
    			for (int k = 0;k < num/2;k++)
    				if (str[k] != str[num - 1 - k])  //按第一个和最后一个,第二个和倒数第二个...字符比较,如果存在某一对不同,则标记为假,且退出
    				{
    					isin = false;
    					break;
    				}
    			if (isin)  //如果标记为真,则说明没有对应不同的字符
    				cout << "YES" << endl;
    			else
    				cout << "NO" << endl;
    		}
    		else
    		{    //这里比较的是相对应位置的字,原理和上面一样
    			for (int k1 = 0;k1 < vec.size() / 2;k1++) 
    				if (vec[k1] != vec[vec.size() - 1 - k1])
    				{
    					isin = false;
    					break;
    				}
    			if (isin) //如果标记为真,则说明没有对应不同的字
    				cout << "YES" << endl;
    			else
    				cout << "NO" << endl;
    		}
    	
    	}
    	return 0;
    }

    【原创声明】转载请标明出处:https://www.cnblogs.com/surecheun/
  • 相关阅读:
    Java 实现 Word 文档分栏效果
    Java 在PPT中添加SmartArt图形
    Java 创建 Excel 数据透视表
    Java分布式架构下如何实现分布式锁
    为什么选择学习Java语言的人越来越多?
    浅析JAVA中VO、DTO、DO、PO的了解
    Java基础之何为动态代理?
    Java三大框架是什么?
    android 系统裁剪 ​
    java怎么就能跨平台了呢
  • 原文地址:https://www.cnblogs.com/surecheun/p/9648984.html
Copyright © 2011-2022 走看看