POJ-3096-Surprising Strings-解题报告

本文提供了一段C++代码,用于判断一个给定的字符串是否为surprising字符串。通过遍历并检查所有可能的D-pairs组合来验证其唯一性,如果所有D-pairs都是唯一的,则该字符串被认为是surprising。

暴力求解的,什么也不说了,上代码。

#include <iostream> #include <vector> using namespace std; int main() { string str; while(cin >> str, str != "*") { string::size_type len = str.length(); /*若字符串的长度为1或者2,则肯定是surprising*/ if(len == 1 || len == 2) { cout << str << " is surprising." << endl; continue; } bool is_sur = true; /*对D-pairs行测试,其中D的大小为[0, length(str)-2]*/ for(int i = 0; i <= len - 2; i++) { vector<string> strvec; //存储i-pairs字符串 for(string::size_type ix = 0; ix < len - i - 1; ix++) { char ch[3]; ch[0] = str[ix]; ch[1] = str[ix + i + 1]; ch[2] = '/0'; string new_str(ch); //生成一个新的i-pairs串 strvec.push_back(new_str); //插入 } /*判断i-pairs是否unique*/ for(vector<string>::size_type ix = 0; ix != strvec.size() - 1; ix++) { for(vector<string>::size_type ix2 = ix + 1; ix2 != strvec.size(); ix2++) { /*若有两个i-pairs串是相同的,则跳出*/ if(strvec[ix] == strvec[ix2]) { is_sur = false; goto lab; } } } } lab: if(is_sur) //测试完所有D-pairs串,均unique cout << str << " is surprising." << endl; else cout << str << " is NOT surprising." << endl; } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值